package com.demo.base.webView.weixin;

import com.alibaba.fastjson.JSON;
import com.demo.base.http.HttpClientHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author 曳戈泰尔
 * @version 1.0
 * @description 获取微信的AccessToken
 * @date 2023/4/4 1:58 PM
 */
@Component
@Slf4j
public class JsAccessToken {

    /** 注入微信小程序配置 */
    private WeJsConfig weJsConfig;

    @Autowired
    public JsAccessToken(WeJsConfig weJsConfig) {
        this.weJsConfig = weJsConfig;
    }

    ///    /** 注入Redis */
    //    private RedisHelper redisHelper;
    //
    //    @Autowired
    //    public void setRedisHelper(RedisHelper redisHelper) {
    //        this.redisHelper = redisHelper;
    //    }

    public String getAccessToken() {

        // 拼接URL
        String url =
                weJsConfig.getTokenUrl()
                        + weJsConfig.getAppidPrefix()
                        + weJsConfig.getAppId()
                        + weJsConfig.getSecretPrefix()
                        + weJsConfig.getSecret()
                        + weJsConfig.getSuffix();
        // 执行请求
        String result = HttpClientHelper.doGet(url);
        // 判断请求是否成功
        if (StringUtils.isBlank(result)) {
            log.error("获取AccessToken失败");

            return null;
        }

        // 解析结果
        // 从结果获取AccessToken
        String accessToken = JSON.parseObject(result).getString("access_token");
        if (StringUtils.isBlank(accessToken)) {
            log.error("获取AccessToken失败");

            return null;
        }

        return accessToken;
    }

    //    // 构造函数之后执行函数
    //    @PostConstruct
    //    public void init() {
    //
    //        // 获取AccessToken
    //        String accessToken = getAccessToken();
    //
    //        // 判断AccessToken是否为空
    //        if (StringUtils.isBlank(accessToken)) {
    //            log.error("获取AccessToken失败");
    //
    //            return;
    //        }
    //
    //        // 将AccessToken存入Redis
    //        redisHelper.set("weXinAccessToken", accessToken, 7000L);
    //    }
    //
    //    // 开启轮询器
    //    // 定时更新AccessToken到Redis
    //    // 保证最新的AccessToken在Redis
    //    // 执行间隔：110分钟
    //    @Scheduled(fixedDelay = 110 * 60 * 1000)
    //    public void start() {
    //
    //        // 获取AccessToken
    //        String accessToken = getAccessToken();
    //
    //        // 判断AccessToken是否为空
    //        if (StringUtils.isBlank(accessToken)) {
    //            log.error("获取AccessToken失败");
    //
    //            return;
    //        }
    //
    //        // 将AccessToken存入Redis
    //        redisHelper.set("weXinAccessToken", accessToken, 7000L);
    //    }
}
